/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package softwaredevendasjava;

import estoque.EstoqueDeProdutos;
import estoque.Produto;
import java.util.Random;
import javax.swing.JOptionPane;

/**
 *
 * @author Gustavo
 */
public class ComprarPanel extends javax.swing.JPanel {

    /**
     * Creates new form ComprarPanel
     */
    
    private EstoqueDeProdutos estoque;
    private Random r;
    private Produto produto;
    private Acao confirmar;
    private Acao cancelar;
    private float valorTotal;
    
    
    public ComprarPanel(Acao confirmar, Acao cancelar) {
        initComponents();
        //Dica: refatorar essa linha.
        this.estoque = new EstoqueDeProdutos();
        this.confirmar = confirmar;
        this.cancelar = cancelar;
    }
    
    
    public void setProduto(Produto p){
        txtQuant.setModel(new javax.swing.SpinnerNumberModel(1, 1, p.getQuantidade(), 1));
        this.txtNomeProduto.setText(p.getNome());
        this.produto = p;
        calcularValorTotal();
    }
    
    
    
    
    
    private void calcularValorTotal(){
        float valorProdutos = this.produto.getPreco()*((Integer)this.txtQuant.getValue()).intValue();
        this.txtValorProduto.setText("R$ "+valorProdutos);
        int valorFrete = Math.round(valorProdutos*0.05f);
        this.txtValorFrete.setText("R$ "+valorFrete);
        int valorDesconto = Math.round((valorProdutos+valorFrete)*0.01f);
        this.txtValorDesconto.setText("R$ "+valorDesconto);
        this.txtValorTotal.setText("R$ "+(valorFrete+valorProdutos-valorDesconto));
        this.valorTotal = valorFrete+valorProdutos-valorDesconto;
    }
    
    

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        txtNomeProduto = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        txtValorDesconto = new javax.swing.JLabel();
        listDesconto = new javax.swing.JComboBox();
        jLabel6 = new javax.swing.JLabel();
        txtValorFrete = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        txtValorTotal = new javax.swing.JLabel();
        btnComprar = new javax.swing.JButton();
        txtQuant = new javax.swing.JSpinner();
        btnCancelarCompra = new javax.swing.JButton();
        txtValorProduto = new javax.swing.JLabel();

        txtNomeProduto.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        txtNomeProduto.setText("Nome do Produto");

        jLabel2.setText("Quantidade");

        jLabel3.setText("Desconto");

        txtValorDesconto.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        txtValorDesconto.setText("R$ 0,0");

        listDesconto.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Por preço", "Por quantidade", "Por preço vs quantidade", "Desconto Aleatório (Teste sua Sorte)" }));
        listDesconto.setToolTipText("Selecione um tipo de desconto");

        jLabel6.setText("Frete");

        txtValorFrete.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        txtValorFrete.setText("R$ 0,0");

        jLabel8.setText("Total");

        txtValorTotal.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        txtValorTotal.setText("R$ 0,0");

        btnComprar.setText("Comprar");
        btnComprar.setToolTipText("Clique aqui para finalizar compra");
        btnComprar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnComprarActionPerformed(evt);
            }
        });

        txtQuant.setModel(new javax.swing.SpinnerNumberModel(1, 1, 1000, 1));
        txtQuant.setToolTipText("Escolha a quantidade de produtos");
        txtQuant.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                txtQuantStateChanged(evt);
            }
        });

        btnCancelarCompra.setText("Cancelar");
        btnCancelarCompra.setToolTipText("Clique aqui para cancelar sua compra");
        btnCancelarCompra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarCompraActionPerformed(evt);
            }
        });

        txtValorProduto.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        txtValorProduto.setText("R$ 0,0");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtNomeProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.LEADING))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(listDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtQuant))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 70, Short.MAX_VALUE))
                            .addComponent(txtValorDesconto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(txtValorFrete, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(txtValorProduto, javax.swing.GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel8)
                        .addGap(242, 242, 242)
                        .addComponent(txtValorTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(btnCancelarCompra)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnComprar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(txtNomeProduto, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtQuant, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtValorProduto))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(jLabel4)
                    .addComponent(txtValorDesconto)
                    .addComponent(listDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(txtValorFrete))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel8)
                    .addComponent(txtValorTotal))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnComprar)
                    .addComponent(btnCancelarCompra))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void txtQuantStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_txtQuantStateChanged
        this.calcularValorTotal();
    }//GEN-LAST:event_txtQuantStateChanged

    private void btnComprarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnComprarActionPerformed
        if(estoque.removerProduto(this.produto.getId(), ((Integer)this.txtQuant.getValue()).intValue())){
            this.confirmar.acao(new String[]{
                String.valueOf(valorTotal), 
                String.valueOf(this.produto.getId()),
                this.txtQuant.getValue().toString()
            });
        }else{
            JOptionPane.showMessageDialog(getRootPane(), "Desculpe, mas o produto se esgotou, ou não há essa quantidade no estoque... :(", "Nao há produtos no estoque", JOptionPane.ERROR_MESSAGE);
            this.cancelar.acao();
        }
    }//GEN-LAST:event_btnComprarActionPerformed

    private void btnCancelarCompraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarCompraActionPerformed
        this.cancelar.acao();
    }//GEN-LAST:event_btnCancelarCompraActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelarCompra;
    private javax.swing.JButton btnComprar;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JComboBox listDesconto;
    private javax.swing.JLabel txtNomeProduto;
    private javax.swing.JSpinner txtQuant;
    private javax.swing.JLabel txtValorDesconto;
    private javax.swing.JLabel txtValorFrete;
    private javax.swing.JLabel txtValorProduto;
    private javax.swing.JLabel txtValorTotal;
    // End of variables declaration//GEN-END:variables
}
